import inquirer from 'inquirer'; // 命令行问答交互插件
import download  from 'download-git-repo'; // 仓库下载插件
import config from '../../config.js'; // 配置信息
import ora from 'ora';
import chalk from 'chalk'; // 命令行样式渲染工具

const mycommander = (program) => {
    // 创建项目命令
    program
    .command('create <projectName> [other...]') // 设置命令
    .alias('cr') // 别名
    .description('创建项目') // 说明
    .action(async (projectName, agrs) => { // 输入命令后的执行函数(param1: 输入的项目名称, param2: 数组类型[当前运行的环境, 文件路径, option参数(即上面的other内容)])
        console.log(`创建了项目名为${projectName}的项目，参数为${agrs}`)
        const answer = await inquirer.prompt([ // 数组中存放多个问题，每一个对象存储一个问题
            {
                type: 'list', // 问题的类型
                name: 'projectName', // 答案的key名
                choices: config.framwork,
                message: '请输入你的项目名称', // 问题描述信息
            }
        ])
        // answer: {projectName: '用户输入的值'}
        // 开始任务等待状态
        const spinner = ora().start();
        // 设置等待信息text
        spinner.text = '正在安装' + answer.projectName + '...';
        // download('direct: 仓库地址', '下载到的路径', {clone: true}); 下载方式：克隆
        download(`direct: ${config.framworkUrl[answer.projectName]}`, projectName, {clone: true}, (err) => { 
            console.log(err);
            if (!err) {
                spinner.succeed('安装成功');
            } else {
                spinner.fail('安装失败');
            }
        });
    });
    // 添加模块命令
    program
    .command('addModel <modelName>')
    .description('添加模块')
    .alias('add')
    .action((modelName) => {
        // 开始任务等待状态
        const spinner = ora().start();
        // 设置等待信息text
        spinner.text = chalk.green(`正在安装${modelName}...`);
        download(`direct:${config.modelUrl[modelName]}`, modelName, (err) => { 
            console.log(err);
            if (!err) {
                spinner.succeed(chalk.green('安装成功'));
            } else {
                spinner.fail(chalk.red('安装失败'));
            }
        });
    })

}

export default mycommander;